package com.engine.salary.mapper.siarchives;

import com.engine.salary.entity.siarchives.param.InsuranceArchivesListParam;
import com.engine.salary.entity.siarchives.po.InsuranceArchivesBaseInfoPO;
import org.apache.ibatis.annotations.Param;

import java.util.Collection;
import java.util.List;

/**
 * @Author sy
 * @Date 2022/10/08
 **/
public interface InsuranceBaseInfoMapper {

    /**
     * 查询所有记录
     *
     * @return 返回集合，没有返回空List
     */
    List<InsuranceArchivesBaseInfoPO> listAll();

    List<InsuranceArchivesBaseInfoPO> listByEmployeeIds(@Param("employeeIds")Collection<Long> employeeIds);

    /**
     * 查询对应id集合的记录
     *
     * @return 返回集合，没有返回空List
     */
    List<InsuranceArchivesBaseInfoPO> listByIds(@Param("ids")Collection<Long> ids);

    /**
     * 查询对应id的记录
     */
    InsuranceArchivesBaseInfoPO getById(@Param("id")Long id);

    /**
     * 获取当前福利档案基础信息（由当前的社保、公积金、其他福利信息表获取）
     * 当设置employeeIds时，则是通过人员id、社保、公积金、其他福利信息表获取指定人员的福利档案基础信息
     */
    List<InsuranceArchivesBaseInfoPO> getInsuranceBaseInfoListByInsuranceDetail(@Param("employeeIds")List<Long> employeeIds);

    /**
     * 获取当前福利档案基础信息（由福利档案基础信息表获取）
     */
    List<InsuranceArchivesBaseInfoPO> getInsuranceBaseInfoList();

    /**
     * 批量保存
     */
    void batchSave(@Param("infos") List<InsuranceArchivesBaseInfoPO> infos);

    /**
     * 批量删除
     */
    void batchDeleteByEmployeeIds(@Param("employeeIds")List<Long> employeeIds);

    /**
     * 根据人员id和个税扣缴义务人删除档案
     * @param insuranceArchivesBaseInfoPO
     */
    void deleteByEmployeeIdAndPayOrg(@Param("param") InsuranceArchivesBaseInfoPO insuranceArchivesBaseInfoPO);
    /**
     * 根据个税扣缴义务人id获取基础信息列表
     * @param paymentOrganization
     * @return
     */
    List<InsuranceArchivesBaseInfoPO> getSocialByPaymentOrganization(@Param("paymentOrganization")Long paymentOrganization);

    /**
     * 获取可以置为正在缴纳的人员基础信息列表
     * @return
     */
    List<InsuranceArchivesBaseInfoPO> getRePayList(String today);

    /**
     * 获取可以置为待减员的人员基础信息列表
     * @return
     */
    List<InsuranceArchivesBaseInfoPO> getReStayDelList(String today);

    /**
     * 根据人事状态和社保执行状态获取基础信息列表
     * @param
     * @return
     */
    List<InsuranceArchivesBaseInfoPO> getAbnormalList(@Param("param") InsuranceArchivesListParam param);

    /**
     * 根据个税扣缴义务人和人员id获取单条数据
     */
    InsuranceArchivesBaseInfoPO getOneByEmployeeIdAndPayOrg(@Param("paymentOrganization")Long paymentOrganization, @Param("employeeId")Long employeeId);

    /**
     * 根据ids重置runStatus
     * @param po
     */
    void updateRunStatusByIds(InsuranceArchivesBaseInfoPO po);

    /**
     * 根据employeeIds重置runStatus
     * @param po
     */
    void updateRunStatusByEmployeeIds(InsuranceArchivesBaseInfoPO po);

    /**
     * 批量更新
     *
     * @param insuranceArchivesBaseInfoPOS
     */
    void batchUpdate(@Param("collection") Collection<InsuranceArchivesBaseInfoPO> insuranceArchivesBaseInfoPOS);

    /**
     * 根据id删除
     * @param archiveDelIds
     */
    void deleteByIds(@Param("ids")List<Long> archiveDelIds);

    /**
     * 根据id更新
     *
     * @param po
     */
    void updateById(InsuranceArchivesBaseInfoPO po);

    /**
     * 获取没有设置社保、公积金最后缴纳月的档案
     * @param employeeIds
     * @return
     */
    List<InsuranceArchivesBaseInfoPO> listEndDateIsNull(@Param("employeeIds") List<Long> employeeIds);

    /**
     * 获取没有设置社保、公积金最后缴纳月的档案
     * @param employeeIds
     * @return
     */
    List<InsuranceArchivesBaseInfoPO> listStartDateIsNull(@Param("employeeIds") List<Long> employeeIds);
}
